package com.ezbuy.common.error;

import com.ezbuy.common.factory.ServiceFactory;
import com.ezbuy.common.functions.Consumer;

/**
 * ezbuy 2018/12/1 上午11:48
 */
public class BaseConsumer<T> implements Consumer<T>, ErrorConsumer {

    //处理成功回调的consumer
    private Consumer<T> origin;

    public BaseConsumer(Consumer<T> origin) {
        this.origin = origin;
    }

    @Override
    public void consume(T response) {
        System.out.println("BaseConsumer.consume");
        if (response == null) {
            onNull();
            return;
        }
        //其实这里还可以用基类response的code再做一次判断的,但是因为我们没有基类Response,故直接默认为是成功了
        origin.consume(response);

    }

    /**
     * 网络请求成功,但是response为空
     */
    public void onNull() {
        System.out.println("BaseConsumer.onNull");
        //默认还是使用注册在公共服务里面的ErrorConsumer的实现类处理,但是可以自己重写
        ServiceFactory.getService(ErrorConsumer.class).onError(new NullPointerException());
    }

    /**
     * 网络请求失败
     */
    @Override
    public void onError(Throwable throwable) {
        System.out.println("BaseConsumer.onError:" + throwable.getMessage());
        //默认还是使用注册在公共服务里面的ErrorConsumer的实现类处理,但是可以自己重写
        ServiceFactory.getService(ErrorConsumer.class).onError(throwable);
    }
}
